import axios from 'axios'
import qS from 'querystring'
import router from '../router/index'
const baseurl = '/api'

// 请求拦截器
axios.interceptors.request.use((req) => {
  // 请求拦截器的使用场景？
  // 设置请求头 设置token
  //   请问第一次出现token是什么时候？ 登录成功之后，所以登录的时候不需要加token! 不需要！！！ 所以要剔除登录接口

  if (req.url !== '/api/userlogin') {
    // 添加token
    req.headers.authorization = sessionStorage.getItem('userinfo')
      ? JSON.parse(sessionStorage.getItem('userinfo')).token
      : null
  }
  // 一定要记得返回
  return req
})

axios.interceptors.response.use((res) => {
  // 响应拦截器的使用场景？
  // 全局拦截token失效 过期等问题
  // 全局拦截错误！！！
  // 一般工作是通过code码去判断逻辑，但是目前这个后端服务不管什么错误码都返回的是500 所以我们需要通过msg信息去分别判断
  if (res.data.msg === '请设置请求头,并携带验证字符串') {
    alert(res.data.msg)
    // 强制跳转到登录
    router.push('/login')
  } else if (res.data.msg === '登录已过期或访问权限受限') {
    alert(res.data.msg)
    // 强制跳转到登录
    router.push('/login')
  } else {
    // 一定要记得返回
    return res.data
  }
})
export const get = (url, params = {}) => {
  // 借助  Promise 进行返回
  return new Promise((resolve, reject) => {
    axios.get(baseurl + url, { params }).then(res => {
      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}
export const post = (url, params, isFile) => {
  // 先处理参数
  let data = {}
  if (isFile) {
    // 有上传文件 要修改content-type
    data = new FormData()
    for (const i in params) {
      data.append(i, params[i])
    }
  } else {
    data = qS.stringify(params)
  }

  // 借助promise 把结果返回出去
  return new Promise((resolve, reject) => {
    axios.post(baseurl + url, data).then(res => {
      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}
